package demo4

// 适配器设计模式 有点类似包装
// 定义：适配器模式将某个类的接口转换成客户端期望的另一个接口表示，主的目的是兼容性，让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper)。

// 适配
type Target interface {
	Request() string
}

// 被适配的对象

type Adapter interface {
	SpecificRequest() string
}

func NewAdapter() Adapter {
	return &adaptee{}
}

type adaptee struct{}

func (a *adaptee) SpecificRequest() string {
	// do-something
	return "success"
}

func NewTarget(adaptee Adapter) Target {
	return &adapter{
		Adapter: adaptee,
	}
}

type adapter struct {
	Adapter
}

func (a *adapter) Request() string {
	// 加逻辑条件
	return a.SpecificRequest()
}
